import dayjs from 'dayjs';

export const TIME_LIST = [
  {
    id: 1,
    title: '上午',
    name: '8:00-12:00',
    value: '12:00:00',
  },
  {
    id: 2,
    title: '下午',
    name: '2:00-6:00',
    value: '18:00:00',
  },
];

export function getFirstDay() {
  const currentDay = dayjs().format('YYYY-MM-DD');
  const currentHour = dayjs().hour();
  return currentHour > 12 ? dayjs(currentDay).add(1, 'day').valueOf() : dayjs(currentDay).valueOf();
}

/** 获取用户预约时间 */
export const getAppointmentDate = () => {
  const currentHour = dayjs().hour();
  return currentHour > 12 ? TIME_LIST[0] : TIME_LIST[1];
};

// 获取当前时间向后28天的列表
export const getDateList = () => {
  let groupList: number[][] = [];
  let dayList: number[] = [];
  const firstDay = getFirstDay();
  for (let i = 0; i < 28; i++) {
    const currentDay = dayjs(dayjs(firstDay).format('YYYY-MM-DD')).add(i, 'day').valueOf();
    dayList.push(currentDay);
  }
  let tempList: number[] = [];
  dayList.forEach((item, key) => {
    if (key % 4 === 3) {
      tempList.push(item);
      groupList.push(tempList);
      tempList = [];
    } else {
      tempList.push(item);
    }
  });
  return groupList;
};

// 获取周
export const getChineseWeek = (day) => {
  const week = dayjs(day).day();
  if (dayjs(day).date() === dayjs().date()) {
    return '今天';
  }
  if (dayjs(day).date() === dayjs().date() + 1) {
    return '明天';
  }
  if (week < 0 || week > 6) {
    throw new Error('error week');
  }
  const weekList = ['日', '一', '二', '三', '四', '五', '六'];
  return '周' + weekList[week];
};

export const debounce = (fn: any, delay: number = 500) => {
  // 是闭包中的
  let timer;
  // input事件调用的函数，相当于obj调用函数 this指向Input
  return function () {
    // 这个if 判断不做也没关系，可直接清空，只有第一次timer非空
    if (timer) {
      clearTimeout(timer);
    }
    // 此时的箭头函数的this 和 arguments 都是从外部函数继承而来
    // r如果用普通函数就要用词法作用域 var thsta = this var arg = arguments
    timer = setTimeout(() => {
      // 使得传入的回调函数的this 指向Input这个元素对象
      // arguments是该事件的详情，可以获得该函数被调用时的所有参数,是一个event 对象（所有Dom事件都会传event对象进入）
      // 直接使用 fn() 问题也不大
      fn.apply(this, arguments);
      timer = null;
    }, delay);
  };
};

// 校验手机号
export const verifyPhone = (phone: string) => {
  let reg = /^1[3|4|5|6|7|8|9][\d]{9}$/;
  if (!phone) return false;
  return reg.test(phone);
};
